package com.glq1218.user.service;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glq1218.article.bo.ArticleBO;
import com.glq1218.domain.IntervalStr;
import com.glq1218.domain.PaginationParam;
import com.glq1218.domain.PaginationResult;
import com.glq1218.domain.SortParam;
import com.glq1218.user.bo.AddUserBO;
import com.glq1218.user.bo.QueryUserBO;
import com.glq1218.user.bo.UpdateUserBO;
import com.glq1218.user.bo.UserBO;
import com.glq1218.user.entity.User;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 用户表(User)表服务接口
 *
 * @author makejava
 * @since 2023-04-10 09:51:45
 */
public interface UserService extends IService<User> {
    /**
     * 查询用户
     *
     * @param paginationParam 分页对象
     * @param sortParam       排序对象
     * @param intervalStr     时间间隔对象
     * @param queryUserBO     查询的用户信息对象
     * @return 符合条件的用户列表
     */
    PaginationResult<UserBO> queryUserList(PaginationParam paginationParam, SortParam sortParam, IntervalStr intervalStr, QueryUserBO queryUserBO);

    /**
     * 通过id获取用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    UserBO getUserById(Serializable id);

    /**
     * 新增用户信息
     *
     * @param addUserBO 新增用户业务对象
     * @return 新增是否成功
     */
    String addUser(AddUserBO addUserBO);

    /**
     * 更新用户信息
     *
     * @param updateUserBO 跟新用户业务对象
     * @return 是否封信成功
     */
    String updateUser(UpdateUserBO updateUserBO);

    List<Map<String, Long>> getUserData();

    List<Map<String, Long>> getUserAddData();

    List<ArticleBO> queryRentalArticle(Long userId);

    <T> boolean isExist(SFunction<User, T> userInfo, String info);
}

